﻿package igz.fleaxy.util
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.DisplayObject;
	import flash.display.PixelSnapping;
	import flash.display.Stage;
	import flash.geom.Rectangle;
	import igz.fleaxy.Fleaxy;
	
	/**
	 * @author Intelygenz | www.intelygenz.com
	 */
	public class ImageUtil
	{
		
		public function ImageUtil() {
			
		}
		
		/**
		 * Devuelve un BitmapData creado a partir del DisplayObject indicado
		 *
		 * @param	p_displayObject
		 * @param	p_transparent 
		 * @param	p_fillColor
		 * @return
		 */
		static public function $GetBitmapData ( p_displayObject:DisplayObject, p_transparent:Boolean = true, p_fillColor:uint = 0x00000000 ) : BitmapData {
			var bmpd:BitmapData = new BitmapData( p_displayObject.width, p_displayObject.height, p_transparent, p_fillColor );
			bmpd.draw( p_displayObject );
			return bmpd;
		}

		/**
		 * Devuelve un Bitmap creado a partir del DisplayObject indicado
		 *
		 * @param	p_displayObject
		 * @param	p_transparent
		 * @param	p_fillColor
		 * @param	p_smoothing
		 * @return
		 */
		static public function $GetBitmap ( p_displayObject:DisplayObject, p_transparent:Boolean = true, p_fillColor:uint = 0x00000000, p_smoothing:Boolean = true ) : Bitmap {
			var bmpd : BitmapData = $GetBitmapData( p_displayObject, p_transparent, p_fillColor );
			return new Bitmap( bmpd, PixelSnapping.AUTO, p_smoothing );
		}

		/**
		 * Ajusta el tamaño de una imagen a una máscara de tal forma que la imagen no pierda la proporcionalidad
		 * y toda la superficie de la máscara se cubierta por ella.
		 *
		 * @param	p_image Imagen
		 * @param	p_mask Máscara
		 */
		static public function $FitImageToMask ( p_image:DisplayObject, p_mask:DisplayObject ) : void {
			$FitImageToBounds(p_image, new Rectangle(0, 0, p_mask.width, p_mask.height));
		}
		
		/**
		 * Ajusta el tamaño de una imagen a un un limite especificado por un rectángulo 
		 * de tal forma que la imagen no pierda la proporcionalidad
		 * y toda la superficie de la máscara se cubierta por ella.
		 *
		 * @param	p_image Imagen
		 * @param	p_bounds Limites
		 */
		static public function $FitImageToBounds ( p_image:DisplayObject, p_bounds:Rectangle ) : void {
			p_image.width = p_bounds.width;
			p_image.scaleY = p_image.scaleX;
			
			if ( p_image.height < p_bounds.height ) {
				p_image.height = p_bounds.height;
				p_image.scaleX = p_image.scaleY;
			}
		}
		
		static public function $FitToStage ( p_image:DisplayObject, p_stage:Stage=null ) : void {
			if (p_stage == null) {
				p_stage = Fleaxy.$Current.$Stage;
			}
			$FitImageToBounds(p_image, new Rectangle(0, 0, p_stage.stageWidth, p_stage.stageHeight));
		}
	}
	
}